package org.jin.jinaicode.ai;

import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.TokenStream;
import dev.langchain4j.service.UserMessage;
import org.jin.jinaicode.ai.model.HtmlCodeResult;
import org.jin.jinaicode.ai.model.MultiFileCodeResult;
import reactor.core.publisher.Flux;

public interface AiCodeGeneratorService {

    /**
     * 生成单文件代码
     * @param userMessage 用户输入
     * @return AI生成的回复
     */
    @SystemMessage(fromResource = "prompt/html.txt")
    HtmlCodeResult generateHTMLCode(String userMessage);


    /**
     * 生成多文件代码
     * @param userMessage 用户输入
     * @return AI生成的回复
     */
    @SystemMessage(fromResource = "prompt/js.txt")
    MultiFileCodeResult generateMultiFileCode(String userMessage);

    /**
     * 生成单文件代码流式
     * @param userMessage 用户输入
     * @return AI生成的回复
     */
    @SystemMessage(fromResource = "prompt/html.txt")
    Flux<String> generateHTMLCodeStream(String userMessage);


    /**
     * 生成多文件代码流式
     * @param userMessage 用户输入
     * @return AI生成的回复
     */
    @SystemMessage(fromResource = "prompt/js.txt")
    Flux<String> generateMultiFileCodeStream(String userMessage);


    /**
     * 生成VUE代码流式
     * @param userMessage 用户输入
     * @return AI生成的回复
     */
    @SystemMessage(fromResource = "prompt/vue.txt")
    TokenStream generateVueProjectCodeStream(@MemoryId long appId, @UserMessage String userMessage);
}
